"""
数据来源：某企业销售的6种商品所对应的送货及用户反馈数据
解决问题：
1、配送服务是否存在问题
2、是否存在尚有潜力的销售区域
3、商品是否存在质量问题
先放结论：
1、货品4→西北，货品2→马来西亚两条线路存在较大问题，急需提升时效
2、货品2在华东地区还有较大市场空间，适合加大投入，同时货品2在西北配送时效长，用户拒收率高，从成本角度考虑，应该减少投入
3、货品1、2、4质量存在问题，建议扩大抽检范围，增大质检力度
分析过程如下
一、数据清洗
① 重复值、缺失值、格式调整
② 异常值处理（比如：销售金额存在等于0的，数量和销售金额的标准差都在均值的8倍以上等）
二、数据规整
比如：增加一项辅助列：月份
三、数据分析并可视化
"""

import os
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = 'SimHei'  # 设置中文显示

# 一、数据清洗
# 1.重复值、缺失值、格式调整
data = pd.read_csv('./Files/data_wuliu.csv', encoding='gbk')
# print(data.head())
# print(data.info())

"""
通过info()可以看出，包括10列数据，名字，数据量，格式等，可以得出：
1.订单号，货品交货情况，数量：存在缺失值，但是缺失量不大，可以删除
2.订单行，对分析无关紧要，可以考虑删除
3.销售金额格式不对（万元|元，逗号问题）,数据类型需要转换成int|float
"""

# 删除重复的数据
data.drop_duplicates(keep='first', inplace=True)
# 删除缺失值（na,删除待有na的整行数据,axis=0,how='any'默认值）
data.dropna(axis=0, how='any', inplace=True)
# print(data.info())
# 删除“订单行”
data.drop(['订单行'], inplace=True, axis=1)
# print(data.info())
# print(data.head())
# 更新索引
data.reset_index(drop=True, inplace=True)


# print(data.info())

# 取出销售金额列，对每一个数据进行清洗
# 编写自定义过滤函数：删除逗号，转成float，如果是万元则*10000，否则，删除元
def data_deal(number):
    if number.find('万元') != -1:  # 找到带有万元的，取出数字，去掉逗号，转成float，*10000
        number_new = float(number[:number.find('万元')].replace(',', '')) * 10000
    else:  # 找到带有元的，删除元，删除逗号，转成float
        number_new = float(number.replace('元', '').replace(',', ''))
        pass
    return number_new


data['销售金额'] = data['销售金额'].map(data_deal)
# print(data.head(20))

# 2.异常值处理
# print(data.describe())
# 1.销售金额为0，采用删除的方法，因为数量很小
# 2.销售金额和数量，存在严重的右偏现象。在电商领域2/8很正常，不需处理
data = data[data['销售金额'] != 0]
# print(data.describe())

# 二、数据规整
data['销售时间'] = pd.to_datetime(data['销售时间'])
data['月份'] = data['销售时间'].apply(lambda x: x.month)
# print(data.head())

# 三、数据分析并可视化
# 1.配送服务是否存在异常

# a.月份的角度
# 从按时交货率来看，第四季度低于第三季度，猜测可能是气候原因造成
data['货品交货状况'] = data['货品交货状况'].str.strip()
data1 = data.groupby(['月份', '货品交货状况']).size().unstack()
data1['按时交货率'] = data1['按时交货'] / (data1['按时交货'] + data1['晚交货'])
print(data1)

# b.销售区域维度
# 西北地区存在突出的延时交货问题，急需解決
data2 = data.groupby(['销售区域', '货品交货状况']).size().unstack()
# print(data2)
data2['按时交货率'] = data2['按时交货'] / (data2['按时交货'] + data2['晚交货'])
print(data2)

# c.货品维度
# 货品4晚交货情况非常严重，其余货品相对交货
data3 = data.groupby(['货品', '货品交货状况']).size().unstack()
# print(data2)
data3['按时交货率'] = data3['按时交货'] / (data3['按时交货'] + data3['晚交货'])
print(data3)

# d.货品和销售区域结合
# 销售区域：最差在西北地区，货品有1和4，主要是货品4送过较晚导致
# 货品：最差的货品2，主要送往华东和马来西亚，主要是马来西亚的送货较晚导致。
data4 = data.groupby(['货品', '销售区域', '货品交货状况']).size().unstack()
# print(data2)
data4['按时交货率'] = data4['按时交货'] / (data4['按时交货'] + data4['晚交货'])
print(data4.sort_values(by='按时交货率', ascending=False))

# 2、是否存在尚有潜力的销售区域
# a.月份维度
# 货品2在10月和12月份，销量猛增，原因猜测有二：1.公司加大营销力度  2.开发了新的市场(后续有结论)
data5 = data.groupby(['月份', '货品'])['数量'].sum().unstack()
print(data5)
data5.plot(kind='line', figsize=(12, 6))
# plt.show()

# b.不同区域
# 从销售区域看，每种货品销售区域为1~3个，货品1有三个销售区域，货品2有两个销售区域，其余货品均有1个销售区域
data6 = data.groupby(['销售区域', '货品'])['数量'].sum().unstack()
print(data6)

# c.月份和区域
# 货品2在10，12月份销量猛增，原因主要发生在原有销售区域（华东）
# 同样，分析出在7，8，9，11月份销售数量还有很大提升空间，可以适当加大营销力度
data7 = data.groupby(['月份', '销售区域', '货品'])['数量'].sum().unstack()
print(data7)

# 3.商品是否存在质量问题
# 货品3.6.5合格率均较高，返修率比较低，说明质量还可以
# 货品1.2.4合格率较低，返修率较高，质量存在一定的问题，需要改善
# 货品2在马拉西亚的拒货率最高，同时，在货品2在马拉西亚的按时交货率也非常低。猜测：马来西亚人对送货的时效性要求较高，
# 如果达不到，则往往考虑拒货。
# 考虑到货品2主要在华东地区销售量大，可以考虑增大在华东的投资，适当较小马来西亚的投入。
data['货品用户反馈'] = data['货品用户反馈'].str.strip()
data8 = data.groupby(['货品', '销售区域'])['货品用户反馈'].value_counts().unstack()
data8['据货率'] = data8['拒货'] / data8.sum(axis=1)
data8['返修率'] = data8['返修'] / data8.sum(axis=1)
data8['合格率'] = data8['质量合格'] / data8.sum(axis=1)
print(data8)
